# data_multi30k.py对源数据进行分词，标点符号处理
# --pair_dir 源数据目录, --dest_dir 输出目录, --src_lang 源语言, --trg_lang 目标语言
python data_multi30k.py --pair_dir $1 --dest_dir $2 --src_lang $3 --trg_lang $4

# 新建train_l文件，合并两个文件到一个文件
touch $1/train_l
# 合并源语言和目标语言的分词文件，是为了后续联合学习BPE子词表，让源语言和目标语言共享同一个子词表，提高翻译模型的泛化能力
cat $2/train_src.cut.txt >> $1/train_l   # 将源语言分词结果追加到train_l文件
cat $2/train_trg.cut.txt >> $1/train_l   # 将目标语言分词结果追加到train_l文件

# 生成词表,把源语言和目标语言生成一本词典，subword方式,统一用20000个subword
# 使用subword-nmt工具的learn-joint-bpe-and-vocab命令，联合学习源语言和目标语言的BPE子词表和词汇表
# -i $1/train_l 指定输入文件为train_l（包含源语言和目标语言的分词文本，便于共享子词表）
# -s 20000 设置BPE的合并操作次数为20000，即最终子词表的大小约为2万
# -o $1/bpe.20000 指定输出的BPE合并规则文件保存路径
# --write-vocabulary $1/vocab 指定生成的词汇表文件保存路径
subword-nmt learn-joint-bpe-and-vocab \
    -i $1/train_l \
    -s 20000 \
    -o $1/bpe.20000 \
    --write-vocabulary $1/vocab

# 应用分词
# 依次处理训练集(train)、验证集(val)、测试集(test)三种数据模式
for mode in train val test; do
    # 对每种模式下的源语言分词文件应用BPE子词分割
    # -c $1/bpe.20000 指定BPE合并规则文件
    # -i $2/${mode}_src.cut.txt 指定输入的分词后源语言文件
    # -o $1/${mode}_src.bpe 指定输出的BPE处理后源语言文件
    subword-nmt apply-bpe -c $1/bpe.20000 -i $2/${mode}_src.cut.txt -o $1/${mode}_src.bpe

    # 对每种模式下的目标语言分词文件应用BPE子词分割
    # -c $1/bpe.20000 指定BPE合并规则文件
    # -i $2/${mode}_trg.cut.txt 指定输入的分词后目标语言文件
    # -o $1/${mode}_trg.bpe 指定输出的BPE处理后目标语言文件
    subword-nmt apply-bpe -c $1/bpe.20000 -i $2/${mode}_trg.cut.txt -o $1/${mode}_trg.bpe

    # 输出提示信息，表示当前模式的BPE处理已完成
    echo "Finished applying bpe to ${mode} files."
done
